JavaScriptãã³ãã«ã®æé©åããŠã§ããµã€ãã®ããã©ãŒãã³ã¹åäžããŠãŒã¶ãŒäœéšã®åŒ·åãç®çãšãããé«åºŠãªã³ãŒãåå²ãã¯ããã¯ã®è©³çްãªè§£èª¬ã
JavaScriptãã³ãã«æé©åæŠç¥ïŒé«åºŠãªã³ãŒãåå²ãã¯ããã¯
仿¥ã®ãŠã§ãéçºã®äžçã§ã¯ãé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒäœéšãæäŸããããšãæãéèŠã§ãã巚倧ãªJavaScriptãã³ãã«ã¯ãŠã§ããµã€ãã®èªã¿èŸŒã¿æéã«å€§ããªåœ±é¿ãäžãããŠãŒã¶ãŒã®äžæºãåŒãèµ·ãããããžãã¹ææšã«åœ±é¿ãäžããå¯èœæ§ããããŸããã³ãŒãåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããããå°ãã管çãããããã£ã³ã¯ïŒå¡ïŒã«åå²ãããªã³ããã³ãã§èªã¿èŸŒããããã«ããããšã§ããã®èª²é¡ã«å¯ŸåŠãã匷åãªãã¯ããã¯ã§ãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãé«åºŠãªã³ãŒãåå²ãã¯ããã¯ãæ·±ãæãäžããJavaScriptãã³ãã«ãæé©åãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžãããããã®æ§ã ãªæŠç¥ãšãã¹ããã©ã¯ãã£ã¹ãæ¢æ±ããŸããWebpackãRollupãParcelãªã©ã®æ§ã ãªãã³ãã©ãŒã«é©çšå¯èœãªæŠå¿µãã«ããŒããããããã¹ãã«ã¬ãã«ã®éçºè åãã«å®çšçãªç¥èŠãæäŸããŸãã
ã³ãŒãåå²ãšã¯ïŒ
ã³ãŒãåå²ãšã¯ã倧ããªJavaScriptãã³ãã«ãããå°ããç¬ç«ãããã£ã³ã¯ã«åå²ããææ³ã§ããã¢ããªã±ãŒã·ã§ã³ã³ãŒãå šäœãæåã«èªã¿èŸŒãã®ã§ã¯ãªããå¿ èŠãªã³ãŒãã ããå¿ èŠãªæã«ããŠã³ããŒããããŸãããã®ã¢ãããŒãã«ã¯ããã€ãã®å©ç¹ããããŸãïŒ
- åæèªã¿èŸŒã¿æéã®æ¹åïŒ æåã®ããŒãžèªã¿èŸŒã¿æã«ããŠã³ããŒãã»è§£æãããJavaScriptã®éãåæžããäœæããã©ãŒãã³ã¹ãåäžãããŸãã
- ãŠãŒã¶ãŒäœéšã®åäžïŒ èªã¿èŸŒã¿æéãççž®ãããããšã§ãããå¿çæ§ãé«ãå¿«é©ãªãŠãŒã¶ãŒäœéšã«ã€ãªãããŸãã
- ãã£ãã·ã³ã°ã®å¹çåïŒ å°ããªãã³ãã«ã¯ãã广çã«ãã£ãã·ã¥ã§ãããããå蚪åæã«ã³ãŒããããŠã³ããŒãããå¿ èŠæ§ãæžå°ããŸãã
- 垯åå¹ æ¶è²»ã®åæžïŒ ãŠãŒã¶ãŒã¯å¿ èŠãªã³ãŒãã®ã¿ãããŠã³ããŒãããããã垯åå¹ ãç¯çŽããããŒã¿æéãåæžã§ããå¯èœæ§ããããŸããããã¯ç¹ã«ã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãéãããŠããå°åã®ãŠãŒã¶ãŒã«ãšã£ãŠæçã§ãã
ã³ãŒãåå²ã®çš®é¡
ã³ãŒãåå²ã«ã¯ãäž»ã«2ã€ã®ã¢ãããŒãããããŸãïŒ
1. ãšã³ããªãŒãã€ã³ãã«ããåå²
ãšã³ããªãŒãã€ã³ãã«ããåå²ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªããšã³ããªãŒãã€ã³ãããšã«å¥ã ã®ãã³ãã«ãäœæããææ³ã§ããåãšã³ããªãŒãã€ã³ãã¯ãç¹å®ã®æ©èœãããŒãžã衚ããŸããäŸãã°ãeã³ããŒã¹ãµã€ãã§ã¯ãããŒã ããŒãžãååäžèЧããŒãžããã§ãã¯ã¢ãŠãããŒãžã§ããããå¥ã®ãšã³ããªãŒãã€ã³ããæã€ãããããŸããã
äŸïŒ
ãŠã§ããµã€ãã« `index.js` ãš `about.js` ã®2ã€ã®ãšã³ããªãŒãã€ã³ãããããšããŸããWebpackã䜿çšããå Žåã`webpack.config.js` ãã¡ã€ã«ã§è€æ°ã®ãšã³ããªãŒãã€ã³ããèšå®ã§ããŸãïŒ
module.exports = {
entry: {
index: './src/index.js',
about: './src/about.js'
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
ãã®èšå®ã«ããã`index.bundle.js`ãš`about.bundle.js`ãšãã2ã€ã®ç¬ç«ãããã³ãã«ãçæãããŸãããã©ãŠã¶ã¯ã¢ã¯ã»ã¹ãããããŒãžã«å¯Ÿå¿ãããã³ãã«ã®ã¿ãããŠã³ããŒãããŸãã
2. åçã€ã³ããŒãïŒã«ãŒãããŒã¹ãŸãã¯ã³ã³ããŒãã³ãããŒã¹ã®åå²ïŒ
åçã€ã³ããŒãã䜿çšãããšãJavaScriptã¢ãžã¥ãŒã«ããªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸããããã¯éåžžããŠãŒã¶ãŒãç¹å®ã®æ©èœãšå¯Ÿè©±ãããšãããç¹å®ã®ã«ãŒãã«ç§»åãããšãã«ããªã¬ãŒãããŸãããã®ã¢ãããŒãã«ãããã³ãŒãã®èªã¿èŸŒã¿ããããã现ããå¶åŸ¡ã§ããç¹ã«å€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
äŸïŒ
Reactã¢ããªã±ãŒã·ã§ã³ã§ã«ãŒãããŒã¹ã®ã³ãŒãåå²ã«åçã€ã³ããŒãã䜿çšããå ŽåïŒ
import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
const Products = lazy(() => import('./pages/Products'));
function App() {
return (
Loading... ãã®äŸã§ã¯ã`Home`ã`About`ã`Products` ã³ã³ããŒãã³ãã `React.lazy()` ã䜿çšããŠåçã«èªã¿èŸŒãŸããŸãã`Suspense` ã³ã³ããŒãã³ãã¯ãã³ã³ããŒãã³ããèªã¿èŸŒãŸããŠããéã«ãã©ãŒã«ããã¯çšã®UIïŒããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãªã©ïŒãæäŸããŸããããã«ããããŠãŒã¶ãŒã¯ã³ãŒããããŠã³ããŒããããã®ãåŸ ã£ãŠããéã«ç©ºçœã®ç»é¢ãèŠãããšããªããªããŸãããããã®ããŒãžã¯å¥ã ã®ãã£ã³ã¯ã«åå²ããã察å¿ããã«ãŒãã«ç§»åãããšãã«ã®ã¿èªã¿èŸŒãŸããŸãã
é«åºŠãªã³ãŒãåå²ãã¯ããã¯
åºæ¬çãªã³ãŒãåå²ã®çš®é¡ã«å ããŠãJavaScriptãã³ãã«ãããã«æé©åããããã®ããã€ãã®é«åºŠãªãã¯ããã¯ããããŸãã
1. ãã³ããŒåå²
ãã³ããŒåå²ã¯ããµãŒãããŒãã£ã®ã©ã€ãã©ãªïŒäŸïŒReactãAngularãVue.jsïŒãå¥ã®ãã³ãã«ã«åé¢ããææ³ã§ãããããã®ã©ã€ãã©ãªã¯ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«æ¯ã¹ãŠå€æŽãããé »åºŠãäœãããããã©ãŠã¶ã«ãã£ãŠãã广çã«ãã£ãã·ã¥ãããŸãã
äŸ (Webpack)ïŒ
module.exports = {
// ... other configurations
optimization: {
splitChunks: {
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'all'
}
}
}
}
};
ãã®Webpackã®èšå®ã¯ã`node_modules` ãã£ã¬ã¯ããªã®ãã¹ãŠã®ã³ãŒããå«ã `vendors.bundle.js` ãšããååã®ç¬ç«ãããã³ãã«ãäœæããŸãã
2. å ±éãã£ã³ã¯ã®æœåº
å ±éãã£ã³ã¯ã®æœåºã¯ãè€æ°ã®ãã³ãã«éã§å ±æãããŠããã³ãŒããç¹å®ãããã®å ±æã³ãŒããå«ãå¥ã®ãã³ãã«ãäœæããŸããããã«ãããã³ãŒãã®åé·æ§ãæžãããã£ãã·ã³ã°å¹çãåäžããŸãã
äŸ (Webpack)ïŒ
module.exports = {
// ... other configurations
optimization: {
splitChunks: {
chunks: 'all',
minSize: 20000, // Minimum size, in bytes, for a chunk to be created.
maxAsyncRequests: 30, // Maximum number of parallel requests when on-demand loading.
maxInitialRequests: 30, // Maximum number of parallel requests at an entry point.
automaticNameDelimiter: '~',
cacheGroups: {
defaultVendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2, // Minimum number of chunks that must share a module before splitting.
priority: -20,
reuseExistingChunk: true
}
}
}
}
};
ãã®èšå®ã¯ãæå®ãããåºæºïŒäŸïŒ`minChunks`ã`minSize`ïŒã«åºã¥ããŠå ±éãã£ã³ã¯ãèªåçã«æœåºããŸãã
3. ã«ãŒãã®ããªãã§ãããšããªããŒã
ããªãã§ãããšããªããŒãã¯ããŠãŒã¶ãŒã®å°æ¥ã®ã¢ã¯ã·ã§ã³ãäºæž¬ããŠãªãœãŒã¹ãäºåã«èªã¿èŸŒããã¯ããã¯ã§ããããªãã§ããã¯ãã©ãŠã¶ãã¢ã€ãã«ç¶æ ã®ãšãã«ããã¯ã°ã©ãŠã³ãã§ãªãœãŒã¹ãããŠã³ããŒãããããªããŒãã¯çŸåšã®ããŒãžã«äžå¯æ¬ ãªç¹å®ã®ãªãœãŒã¹ã®èªã¿èŸŒã¿ãåªå ããŸãã
ããªãã§ããã®äŸïŒ
ãã®HTMLã¿ã°ã¯ããã©ãŠã¶ãã¢ã€ãã«ç¶æ ã®ãšãã« `about.bundle.js` ãã¡ã€ã«ãããªãã§ããããããæç€ºããŸããããã«ããããAboutãããŒãžãžã®ããã²ãŒã·ã§ã³ãå€§å¹ ã«é«éåãããŸãã
ããªããŒãã®äŸïŒ
ãã®HTMLã¿ã°ã¯ããã©ãŠã¶ã« `critical.bundle.js` ã®èªã¿èŸŒã¿ãåªå ããããæç€ºããŸããããã¯ãããŒãžã®åæã¬ã³ããªã³ã°ã«äžå¯æ¬ ãªã³ãŒããèªã¿èŸŒãã®ã«åœ¹ç«ã¡ãŸãã
4. ããªãŒã·ã§ã€ãã³ã°
ããªãŒã·ã§ã€ãã³ã°ã¯ãJavaScriptãã³ãã«ãããããã³ãŒãïŒæªäœ¿çšã³ãŒãïŒãåé€ãããã¯ããã¯ã§ãã䜿çšãããŠããªã颿°ã倿°ãã¢ãžã¥ãŒã«ãç¹å®ããŠåé€ãããã³ãã«ãµã€ãºãå°ããããŸããWebpackãRollupã®ãããªãã³ãã©ãŒã¯ãæšæºã§ããªãŒã·ã§ã€ãã³ã°ããµããŒãããŠããŸãã
ããªãŒã·ã§ã€ãã³ã°ã®äž»ãªèæ ®äºé ïŒ
- ESã¢ãžã¥ãŒã«ïŒESMïŒã䜿çšããïŒ ããªãŒã·ã§ã€ãã³ã°ã¯ãã©ã®ã³ãŒããæªäœ¿çšãã倿ããããã«ãESã¢ãžã¥ãŒã«ã®éçæ§é ïŒ`import`ãš`export`æïŒã«äŸåããŠããŸãã
- å¯äœçšãé¿ããïŒ å¯äœçšãšã¯ã颿°ã®ã¹ã³ãŒãå€ã§ã¢ã¯ã·ã§ã³ãå®è¡ããã³ãŒãïŒäŸïŒã°ããŒãã«å€æ°ã®å€æŽïŒã§ãããã³ãã©ãŒã¯å¯äœçšã®ããã³ãŒãã®ããªãŒã·ã§ã€ãã³ã°ã«èŠåŽããå ŽåããããŸãã
- `package.json`ã®`sideEffects`ããããã£ã䜿çšããïŒ `package.json`ãã¡ã€ã«ã®`sideEffects`ããããã£ã䜿çšããŠãããã±ãŒãžå ã®ã©ã®ãã¡ã€ã«ã«å¯äœçšãããããæç€ºçã«å®£èšã§ããŸããããã¯ããã³ãã©ãŒãããªãŒã·ã§ã€ãã³ã°ãæé©åããã®ã«åœ¹ç«ã¡ãŸãã
5. èšç®éã®å€ãã¿ã¹ã¯ã®ããã®Web Workerã®äœ¿çš
Web Workerã䜿çšãããšãJavaScriptã³ãŒããããã¯ã°ã©ãŠã³ãã¹ã¬ããã§å®è¡ã§ãããããã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ããŸããããã¯ãç»ååŠçãããŒã¿åæãè€éãªèšç®ãªã©ãèšç®éã®å€ãã¿ã¹ã¯ã«ç¹ã«åœ¹ç«ã¡ãŸãããããã®ã¿ã¹ã¯ãWeb Workerã«ãªãããŒãããããšã§ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®å¿çæ§ãç¶æã§ããŸãã
äŸïŒ
// main.js
const worker = new Worker('worker.js');
worker.onmessage = (event) => {
console.log('Result from worker:', event.data);
};
worker.postMessage({ data: 'some data for processing' });
// worker.js
self.onmessage = (event) => {
const data = event.data.data;
// Perform computationally intensive task
const result = processData(data);
self.postMessage(result);
};
function processData(data) {
// ... your processing logic
return 'processed data';
}
6. ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³
Webpack 5ã§å©çšå¯èœãªã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãå®è¡æã«ç°ãªãã¢ããªã±ãŒã·ã§ã³éã§ã³ãŒããå ±æããããšãå¯èœã«ããŸããããã«ããããã€ã¯ãããã³ããšã³ããæ§ç¯ããä»ã®ã¢ããªã±ãŒã·ã§ã³ããã¢ãžã¥ãŒã«ãåçã«èªã¿èŸŒãããšãã§ããå šäœã®ãã³ãã«ãµã€ãºãåæžããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
äŸïŒ
äŸãã°ã`app1` ãš `app2` ãšãã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãããã`app1` ã®ãã¿ã³ã³ã³ããŒãã³ãã `app2` ã§å ±æããããšããŸãã
app1 (webpack.config.js)ïŒ
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other configurations
plugins: [
new ModuleFederationPlugin({
name: 'app1',
filename: 'remoteEntry.js',
exposes: {
'./Button': './src/Button.js'
}
})
]
};
app2 (webpack.config.js)ïŒ
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other configurations
plugins: [
new ModuleFederationPlugin({
name: 'app2',
remotes: {
app1: 'app1@http://localhost:3000/remoteEntry.js'
}
})
]
};
`app2` ã§ã¯ã`app1` ãããã¿ã³ã³ã³ããŒãã³ããã€ã³ããŒãããŠäœ¿çšã§ããããã«ãªããŸãïŒ
import Button from 'app1/Button';
ã³ãŒãåå²ã®ããã®ããŒã«ãšã©ã€ãã©ãª
ãããžã§ã¯ãã§ã³ãŒãåå²ãå®è£ ããã®ã«åœ¹ç«ã€ããã€ãã®ããŒã«ãšã©ã€ãã©ãªããããŸãïŒ
- WebpackïŒ ãšã³ããªãŒãã€ã³ãåå²ãåçã€ã³ããŒãããã³ããŒåå²ãªã©ãããŸããŸãªã³ãŒãåå²ãã¯ããã¯ããµããŒããã匷åã§å€æ©èœãªã¢ãžã¥ãŒã«ãã³ãã©ãŒã
- RollupïŒ ããªãŒã·ã§ã€ãã³ã°ã«åªããé«åºŠã«æé©åããããã³ãã«ãçæããã¢ãžã¥ãŒã«ãã³ãã©ãŒã
- ParcelïŒ æå°éã®èšå®ã§ã³ãŒãåå²ãèªåçã«åŠçãããèšå®äžèŠã®ãã³ãã©ãŒã
- React.lazyïŒ åçã€ã³ããŒãã䜿çšããŠã³ã³ããŒãã³ããé å»¶èªã¿èŸŒã¿ããããã®çµã¿èŸŒã¿React APIã
- Loadable ComponentsïŒ Reactã§ã³ãŒãåå²ãè¡ãããã®é«éã³ã³ããŒãã³ãã
ã³ãŒãåå²ã®ãã¹ããã©ã¯ãã£ã¹
ã³ãŒãåå²ã广çã«å®è£ ããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- ã¢ããªã±ãŒã·ã§ã³ã®åæïŒ 倧ããªã³ã³ããŒãã³ããããŸã䜿çšãããªãæ©èœããŸãã¯ã«ãŒãããŒã¹ã®å¢çã«çŠç¹ãåœãŠãã³ãŒãåå²ãæã倧ããªåœ±é¿ãäžããé åãç¹å®ããŸãã
- ããã©ãŒãã³ã¹ããžã§ããã®èšå®ïŒ ç®æšãšããèªã¿èŸŒã¿æéããã³ãã«ãµã€ãºãªã©ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ç®æšãå®çŸ©ãããããã®ããžã§ãããã³ãŒãåå²ã®åãçµã¿ã®æéãšããŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒ ã³ãŒãåå²ãå®è£ ããåŸããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ã远跡ããŠãæãŸããçµæãåŸãããŠããããšã確èªããŸããGoogle PageSpeed InsightsãWebPageTestãLighthouseãªã©ã®ããŒã«ã䜿çšããŠããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã枬å®ããŸãã
- ãã£ãã·ã³ã°ã®æé©åïŒ ãµãŒããŒãèšå®ããŠJavaScriptãã³ãã«ãé©åã«ãã£ãã·ã¥ãããŠãŒã¶ãŒãå蚪åæã«ã³ãŒããããŠã³ããŒãããå¿ èŠæ§ãæžãããŸãããã£ãã·ã¥ãã¹ãã£ã³ã°æè¡ïŒäŸïŒãã¡ã€ã«åã«ããã·ã¥ã远å ããïŒã䜿çšããŠããŠãŒã¶ãŒãåžžã«ææ°ããŒãžã§ã³ã®ã³ãŒããåãåãããã«ããŸãã
- ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã®äœ¿çšïŒ JavaScriptãã³ãã«ãCDNçµç±ã§é ä¿¡ããäžçäžã®ãŠãŒã¶ãŒã®èªã¿èŸŒã¿æéãæ¹åããŸãã
- ãŠãŒã¶ãŒå±€ã®èæ ®ïŒ ã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®ç¹å®ã®ããŒãºã«åãããŠã³ãŒãå岿Šç¥ã調æŽããŸããäŸãã°ããŠãŒã¶ãŒã®ããªãã®éšåãäœéãªã€ã³ã¿ãŒãããæ¥ç¶ã䜿çšããŠããå Žåãããç©æ¥µçãªã³ãŒãåå²ãå¿ èŠã«ãªãå ŽåããããŸãã
- ãã³ãã«ã®èªååæïŒ Webpack Bundle Analyzerãªã©ã®ããŒã«ã䜿çšããŠãã³ãã«ãµã€ãºãèŠèŠåããæé©åã®æ©äŒãç¹å®ããŸãã
å®äžçã®äŸãšã±ãŒã¹ã¹ã¿ãã£
å€ãã®äŒæ¥ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžãããããã«ã³ãŒãåå²ãæåè£ã«å°å ¥ããŠããŸãã以äžã«ããã€ãã®äŸãæããŸãïŒ
- GoogleïŒ Googleã¯ãGmailãGoogleããããªã©ãèªç€Ÿã®Webã¢ããªã±ãŒã·ã§ã³å šäœã§ã³ãŒãåå²ãåºç¯å²ã«äœ¿çšããé«éã§å¿çæ§ã®é«ããŠãŒã¶ãŒäœéšãæäŸããŠããŸãã
- FacebookïŒ Facebookã¯ã³ãŒãåå²ãå©çšããŠãæ§ã ãªæ©èœãã³ã³ããŒãã³ãã®èªã¿èŸŒã¿ãæé©åãããŠãŒã¶ãŒãå¿ èŠãªã³ãŒãã®ã¿ãããŠã³ããŒãããããã«ããŠããŸãã
- NetflixïŒ Netflixã¯ã³ãŒãåå²ãæ¡çšããŠWebã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãæ¹åãããŠãŒã¶ãŒãããè¿ éã«ã³ã³ãã³ãã®ã¹ããªãŒãã³ã°ãéå§ã§ããããã«ããŠããŸãã
- 倧æEã³ããŒã¹ãã©ãããã©ãŒã ïŒAmazonãAlibabaïŒïŒ ãããã®ãã©ãããã©ãŒã ã¯ãã³ãŒãåå²ã掻çšããŠååããŒãžã®èªã¿èŸŒã¿æéãæé©åããäžçäžã®äœçŸäžäººãã®ãŠãŒã¶ãŒã®ã·ã§ããã³ã°äœéšãåäžãããŠããŸãããŠãŒã¶ãŒã®æäœã«åºã¥ããŠãåå詳现ãé¢é£ååããŠãŒã¶ãŒã¬ãã¥ãŒãªã©ãåçã«èªã¿èŸŒã¿ãŸãã
ãããã®äŸã¯ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒäœéšãåäžãããäžã§ã®ã³ãŒãåå²ã®æå¹æ§ã瀺ããŠããŸããã³ãŒãåå²ã®ååã¯ãæ§ã ãªå°åãã€ã³ã¿ãŒãããæ¥ç¶é床ãåããæ®éçã«é©çšå¯èœã§ããã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã§äºæ¥ãå±éããäŒæ¥ã¯ãç©æ¥µçãªã³ãŒãå岿Šç¥ãå®è£ ããããšã§ãæã倧ããªããã©ãŒãã³ã¹æ¹åãèŠèŸŒãããšãã§ããŸãã
çµè«
ã³ãŒãåå²ã¯ãJavaScriptãã³ãã«ãæé©åãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžãããããã®éèŠãªãã¯ããã¯ã§ããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããããå°ãã管çãããããã£ã³ã¯ã«åå²ããããšã§ãåæèªã¿èŸŒã¿æéãççž®ãããŠãŒã¶ãŒäœéšãåäžããããã£ãã·ã³ã°å¹çãé«ããããšãã§ããŸããæ§ã ãªçš®é¡ã®ã³ãŒãåå²ãçè§£ãããã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã§ããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«æ¹åãããŠãŒã¶ãŒã«ããè¯ãäœéšãæäŸã§ããŸãã
ãŠã§ãã¢ããªã±ãŒã·ã§ã³ããŸããŸãè€éã«ãªãã«ã€ããŠãã³ãŒãåå²ã¯ããã«éèŠã«ãªããŸããææ°ã®ã³ãŒãåå²ãã¯ããã¯ãšããŒã«ãåžžã«ææ¡ããŠããããšã§ããŠã§ããµã€ããããã©ãŒãã³ã¹ã«æé©åãããäžçäžã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒäœéšãæäŸã§ããããã«ãªããŸãã